home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / mods / misc / CUST.HawkEye.lha / HawkEye / HawkEye.s < prev   
Text File  |  1998-09-20  |  10KB  |  565 lines

  1. *************************************************
  2. * Hawk Eye by Wally Beben / Thalamus (1988).    *
  3. * Adapted by Mr.STYCKX / Nicolas Pomarède    *
  4. *                        *
  5. * Original replay in $490 - $c9ee.        *
  6. *                        *
  7. * Ripped : 20/09/98                *
  8. * EaglePlayer / Delitracker port : 20/09/98    *
  9. *    Volume                    *
  10. *    Balance                    *
  11. *    SubSong                    *
  12. *    EP_Voices                *
  13. *    EP_StructInit (Analyzer)        *
  14. *************************************************
  15.  
  16.     opt    o+
  17.  
  18.     output    ram:CUST.HawkEye
  19.  
  20.  
  21. HAWK_TEST    =    0        ; 0 => BUILD COMPLETE CUSTOM MODULE
  22.                     ; 1 => BUILD SMALL CODE FOR TESTING
  23.  
  24.     section    Hawk,code_c
  25.  
  26.  
  27.  
  28.     incdir    "Include:"
  29.     include    "misc/DeliPlayer.i"
  30.     include    "misc/EaglePlayer.i"
  31.  
  32.  
  33.     IFEQ    HAWK_TEST-0            ; COMPLETE VERSION
  34.  
  35.  
  36.     PLAYERHEADER PlayerTagArray
  37.  
  38.     dc.b '$VER: Hawk Eye Musics by Wally Beben custom player V1.0, '
  39.     dc.b 'ripped and adapted by Mr.STYCKX (09/98)',0
  40.  
  41.     EVEN
  42.  
  43. PlayerTagArray
  44.     dc.l    DTP_CustomPlayer,1        ; CustomPlayer - Tag (important !!!)
  45.     dc.l    DTP_Flags,PLYF_CUSTOM
  46.  
  47.     dc.l    DTP_PlayerVersion,1<<16+0    ; v1.0
  48.     dc.l    EP_PlayerVersion,1
  49.     dc.l    DTP_PlayerName,PName
  50.     dc.l    DTP_Creator,CName
  51.  
  52.     dc.l    DTP_InitPlayer,InitPlay        ; alloc audio
  53.     dc.l    DTP_EndPlayer,EndPlay        ; free audio
  54.     dc.l    DTP_InitSound,HAWK_init    ; init custom data
  55.     dc.l    DTP_EndSound,HAWK_end        ; clear DMA
  56.  
  57.     dc.l    DTP_SubSongRange,HAWK_SubSongRange
  58.  
  59.     dc.l    DTP_Interrupt,HAWK_Play
  60.  
  61.     dc.l    DTP_Volume,HAWK_Volume
  62.     dc.l    DTP_Balance,HAWK_Volume
  63.  
  64.     dc.l    EP_Voices,HAWK_SetVoices
  65.     dc.l    EP_StructInit,HAWK_StructInit
  66.  
  67.     dc.l    EP_Flags,EPB_Voices!EPB_Analyzer!EPB_Volume!EPB_Balance
  68.  
  69.     dc.l    TAG_DONE
  70.  
  71.  
  72. PName    dc.b    "Hawk Eye Custom v1.0",0
  73. CName    dc.b    "Music by Wally Beben / Thalamus (1988).",$a
  74.     dc.b    "Adapted by Mr.STYCKX (20/11/98)",0
  75.  
  76.     EVEN
  77.  
  78.  
  79. HAWK_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  80.     ds.l    UPS_SizeOF        ; les analyzers
  81.  
  82.  
  83.  
  84. *-----------------------------------------------------------------------*
  85. ;
  86. ; Init Player
  87.  
  88. InitPlay
  89.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  90.     jmp    (a0)
  91.  
  92.  
  93. *-----------------------------------------------------------------------*
  94. ;
  95. ; End Player
  96.  
  97. EndPlay
  98.     move.l    dtg_AudioFree(a5),a0        ; Function
  99.     jmp    (a0)
  100.  
  101.  
  102. *-----------------------------------------------------------------------*
  103. ;
  104. ; Init Custom Replay Routine
  105.  
  106. HAWK_init
  107.     move.w    dtg_SndNum(a5),d0    ; sub song nbr (1..6)
  108.     bsr.s    HAWK_InitSong
  109.  
  110.     rts
  111.  
  112.  
  113. *-----------------------------------------------------------------------*
  114. ;
  115. ; Clear Audio Reg.
  116.  
  117. HAWK_end
  118.     move.w    #$f,$dff096
  119.     clr.w    $dff0a8
  120.     clr.w    $dff0b8
  121.     clr.w    $dff0c8
  122.     clr.w    $dff0d8
  123.  
  124.     rts
  125.  
  126.  
  127. *-----------------------------------------------------------------------*
  128. ;
  129. ; Interrupt routine called every 1/50 s
  130.  
  131. HAWK_Play
  132.     bsr.s    HAWK_InterVBL
  133.     rts
  134.  
  135.  
  136. *-----------------------------------------------------------------------*
  137. ;
  138. ; Returns min and max sub song
  139.  
  140. HAWK_SubSongRange
  141.     moveq    #1,d0            ; min
  142.     moveq    #6,d1            ; max
  143.  
  144.     rts
  145.  
  146.  
  147. *-----------------------------------------------------------------------*
  148. ;
  149. ; Set Volume
  150.  
  151. HAWK_Volume
  152.     move.w    dtg_SndLBal(a5),d0    ; Vol Left
  153.     mulu    dtg_SndVol(a5),d0    ; Vol Max
  154.     lsr.w    #6,d0
  155.     move.w    d0,HAWK_MasterVolA    ; final Vol Left
  156.     move.w    d0,HAWK_MasterVolD
  157.  
  158.     move.w    dtg_SndRBal(a5),d0
  159.     mulu    dtg_SndVol(a5),d0
  160.     lsr.w    #6,d0
  161.     move.w    d0,HAWK_MasterVolB
  162.     move.w    d0,HAWK_MasterVolC
  163.  
  164.     rts
  165.  
  166.  
  167. *-----------------------------------------------------------------------*
  168. ;
  169. ; Set DMA Voices
  170.  
  171. HAWK_SetVoices
  172.     move.w    d0,HAWK_DMA_EP    ; bit=1 <=> voice is ON
  173.  
  174.     rts
  175.  
  176.  
  177. *-----------------------------------------------------------------------*
  178. ;
  179. ; Returns address of the UPS structure to EaglePlayer
  180.  
  181. HAWK_StructInit
  182.     lea    HAWK_StructAnalyzer(pc),a0
  183.  
  184.     rts
  185.  
  186.  
  187.  
  188. *-----------------------------------------------------------------------*
  189.  
  190.  
  191.     ELSEIF                ; TESTVERSION
  192.  
  193.  
  194. ;-------
  195. ; Small code to test the player under a debugger
  196.  
  197.  
  198.     moveq    #1,d0
  199.     bsr    HAWK_InitSong
  200.  
  201.     move.l    $6c.w,Jmp+2
  202.     move.l    #Vbl,$6c.w
  203.     rts
  204.  
  205.  
  206. End
  207.     move.w    #$f,$dff096
  208.     move.l    Jmp+2(pc),$6c.w
  209.     rts
  210.  
  211.  
  212. Vbl
  213.     btst    #5,$dff01f
  214.     beq.s    Jmp
  215.  
  216. .wa    cmp.b    #70,$dff006
  217.     blt.s    .wa
  218.  
  219.     move.w    #$f00,$dff180
  220.  
  221.     movem.l    d0-a6,-(a7)
  222.     bsr    HAWK_InterVBL
  223.     movem.l    (a7)+,d0-a6
  224.  
  225.     move.w    #$345,$dff180
  226.  
  227. Jmp    jmp    0.l
  228.  
  229.  
  230.  
  231.  
  232. HAWK_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  233.     ds.l    UPS_SizeOF        ; les analyzers
  234.  
  235.  
  236.     ENDC
  237.  
  238.  
  239.  
  240. ;------------------------------------------------------------------------
  241. ; Données pour EaglePlayer / Delitracker
  242.  
  243. HAWK_DMA_EP    dc.w    %1111        ; voix actives depuis EaglePlayer
  244.  
  245. HAWK_MasterVolA    dc.w    64        ; 0 .. 64
  246. HAWK_MasterVolB    dc.w    64
  247. HAWK_MasterVolC    dc.w    64
  248. HAWK_MasterVolD    dc.w    64
  249.  
  250. HAWK_OldPer1    dc.w    -1
  251. HAWK_OldPer2    dc.w    -1
  252. HAWK_OldPer3    dc.w    -1
  253. HAWK_OldPer4    dc.w    -1
  254.  
  255.  
  256.  
  257.  
  258.  
  259. ;-----------------------------------------------------------------------
  260. ; Hawk Eye Musics
  261. ; Original music Wally Beben / Thalamus
  262. ;
  263. ; HAWK_InitSong : D0 = 1 .. 6
  264. ; HAWK_InterVBL : called every VBL
  265. ;
  266.  
  267.  
  268.  
  269. ;-----------------------------------------------------------------------
  270. ; Init song
  271.  
  272. HAWK_InitSong
  273.     move.b    d0,HAWK_Data+$4a2-$490
  274.     bra    HAWK_Patch
  275.  
  276.  
  277.  
  278. ;-----------------------------------------------------------------------
  279. ; Routine appelée à chaque VBL
  280.  
  281. HAWK_InterVBL
  282.     movem.l    D0-A6,-(SP)
  283.  
  284.     lea    HAWK_StructAnalyzer(pc),a0
  285.     move.w    #-1,UPS_Enabled(a0)
  286.     move.w    #UPSB_Adr!UPSB_Len!UPSB_Per!UPSB_Vol!UPSB_DMACon,UPS_Flags(a0)
  287.  
  288.     move.w    UPS_Voice1Per(a0),HAWK_OldPer1
  289.     move.w    UPS_Voice2Per(a0),HAWK_OldPer2
  290.     move.w    UPS_Voice3Per(a0),HAWK_OldPer3
  291.     move.w    UPS_Voice4Per(a0),HAWK_OldPer4
  292.  
  293.     clr.w    UPS_Voice1Per(a0)
  294.     clr.w    UPS_Voice2Per(a0)
  295.     clr.w    UPS_Voice3Per(a0)
  296.     clr.w    UPS_Voice4Per(a0)
  297.  
  298.  
  299.     ;-- Original VBL
  300.     bsr    HAWK_Data+$494-$490
  301.  
  302.  
  303.     ;-- Set EaglePlayer Structures
  304.     ; La replay remet la période à chaque VBL,ce qui perturbe
  305.     ; les analyzers. On ne transmet donc une période que si elle est
  306.     ; différente de la VBL précédente.
  307.  
  308.     lea    HAWK_StructAnalyzer(pc),a0
  309.     move.w    UPS_Voice1Per(a0),d0
  310.     cmp.w    HAWK_OldPer1(pc),d0    ; nouvelle fréquence
  311.     bne.s    .2            ; oui
  312.     clr.w    UPS_Voice1Per(a0)    ; non, on remet a 0
  313.  
  314. .2    move.w    UPS_Voice2Per(a0),d0
  315.     cmp.w    HAWK_OldPer2(pc),d0
  316.     bne.s    .3
  317.     clr.w    UPS_Voice2Per(a0)
  318.  
  319. .3    move.w    UPS_Voice3Per(a0),d0
  320.     cmp.w    HAWK_OldPer3(pc),d0
  321.     bne.s    .4
  322.     clr.w    UPS_Voice3Per(a0)
  323.  
  324. .4    move.w    UPS_Voice4Per(a0),d0
  325.     cmp.w    HAWK_OldPer4(pc),d0
  326.     bne.s    .0
  327.     clr.w    UPS_Voice4Per(a0)
  328. .0
  329.  
  330.  
  331.  
  332.     clr.w    UPS_Enabled(a0)
  333.  
  334.     movem.l    (SP)+,D0-A6
  335.     rts
  336.  
  337.  
  338.  
  339.  
  340. HAWK_Patch
  341.     tst.w    Patch_Done
  342.     bne    .done            ; do patch only once
  343.     st    Patch_Done
  344.  
  345.     ;-- Reloc Replay
  346.  
  347.     lea    HAWK_Data(pc),a0    ; reloc from $490 to $130c
  348.     lea    HAWK_Data+$130c-$490(pc),a1
  349.     move.l    a0,d0
  350. .loop    cmp.l    #$490,(a0)
  351.     blt    .next
  352.     cmp.l    #$c9ee,(a0)
  353.     bgt.s    .next
  354.     cmp.l    #$4cf9,(a0)
  355.     beq.s    .next
  356.     cmp.l    #$b028,(a0)
  357.     beq.s    .next
  358.     cmp.l    #$3b40,(a0)
  359.     beq.s    .next
  360.     cmp.l    #$1b40,(a0)
  361.     beq.s    .next
  362.     cmp.l    #$6700,(a0)
  363.     beq.s    .next
  364.     cmp.l    #$ba04,(a0)
  365.     beq.s    .next
  366.     cmp.l    #$51cc,(a0)
  367.     beq.s    .next
  368.     cmp.l    #$1169,(a0)
  369.     beq.s    .next
  370.     cmp.l    #$43f9,(a0)
  371.     beq.s    .next
  372.     cmp.l    #$650,(a0)
  373.     beq.s    .next
  374.     cmp.l    #$f00,(a0)
  375.     beq.s    .next
  376.     cmp.l    #$4040,(a0)
  377.     beq.s    .next
  378.     cmp.l    #$3434,(a0)
  379.     beq.s    .next
  380.     cmp.l    #$1414,(a0)
  381.     beq.s    .next
  382.     sub.l    #$490,(a0)
  383.     add.l    d0,(a0)
  384.     addq.w    #2,a0
  385. .next    addq.w    #2,a0
  386.     cmp.l    a1,a0
  387.     blt    .loop
  388.  
  389.  
  390.     ;-- Patch Replay
  391.  
  392.     lea    HAWK_Data(pc),a0    ; reloc from $490 to $130c
  393.  
  394.     lea    $804-$490(a0),a1
  395.     lea    StopDMA(pc),a2
  396.     bsr.s    DoJsr
  397.  
  398.     lea    $be2-$490(a0),a1
  399.     lea    CopyRepeatLen(pc),a2
  400.     bsr.s    DoJsr
  401.  
  402.     lea    $c2a-$490(a0),a1
  403.     lea    CopyRepeatStart(pc),a2
  404.     bsr.s    DoJsr
  405.  
  406.     lea    $e6c-$490(a0),a1
  407.     lea    CopyLen(pc),a2
  408.     bsr.s    DoJsr
  409.  
  410.     lea    $e8c-$490(a0),a1
  411.     lea    CopyStart(pc),a2
  412.     bsr.s    DoJsr
  413.  
  414.     lea    $ed8-$490(a0),a1
  415.     lea    SetDMAPerVol(pc),a2
  416.     bsr.s    DoJmp
  417.  
  418. .done    rts
  419.  
  420.  
  421.  
  422. DoJsr    move.w    #$4eb9,(a1)+
  423.     move.l    a2,(a1)+
  424.     rts
  425.  
  426. DoJmp    move.w    #$4ef9,(a1)+
  427.     move.l    a2,(a1)+
  428.     rts
  429.  
  430. DoBsr    move.w    #$6100,(a1)+
  431.     sub.l    a1,a2
  432.     move.w    a2,(a1)+
  433.     rts
  434.  
  435.  
  436. ;-------
  437.  
  438. StopDMA
  439.     move.w    d5,$dff096
  440.     rts
  441.  
  442.  
  443. CopyRepeatLen
  444.     move.w    d7,-(sp)
  445.     move.w    d1,d7            ; d1 = 0..3
  446.     mulu    #UPS_Modulo,d7
  447.     lea    HAWK_StructAnalyzer(pc),a5
  448.     add.w    d7,a5
  449. ;;    move.w    d0,UPS_Voice1Len(a5)    ; don't set val (ugly analyzer...)
  450.     lea    $dff0a4,a5
  451.     move.w    (sp)+,d7
  452.     rts
  453.  
  454.  
  455. CopyRepeatStart
  456.     move.w    d7,-(sp)
  457.     move.w    d1,d7
  458.     mulu    #UPS_Modulo,d7
  459.     lea    HAWK_StructAnalyzer(pc),a5
  460.     add.w    d7,a5
  461. ;;    move.l    d6,UPS_Voice1Adr(a5)
  462.  
  463.     clr.w    UPS_Voice1Repeat(a5)    ; repeat ON
  464.     tst.b    d0
  465.     bne.s    .ok
  466.     move.w    #1,UPS_Voice1Repeat(a5)    ; repeat OFF
  467. .ok
  468.  
  469.     lea    $dff0a0,a5
  470.     move.w    (sp)+,d7
  471.     rts
  472.  
  473.  
  474. CopyLen
  475.     move.w    d7,-(sp)
  476.     moveq    #0,d7
  477.     move.b    HAWK_Data+$1044-$490,d7        ; current voice 0..3
  478.     mulu    #UPS